/* SETU consultas */
var consulta = new function()
{
    this.listarGruposUrl    = '';
    this.listarPuntosUrl    = '';
    this.listarTiemposUrl   = '';
    this.actualizarInterval = null;
    this.currentPuntoId     = false;
    this.currentColor       = 1;
    this.timeDiff           = 0;
    // Init
    this.init = function(listarGruposUrl, listarPuntosUrl, listarTiemposUrl)
    {
        this.listarGruposUrl  = listarGruposUrl;
        this.listarPuntosUrl  = listarPuntosUrl;
        this.listarTiemposUrl = listarTiemposUrl;
        $('#grupos').bind('change', function() { consulta.cambiarGrupo(); });
        $('#puntos').bind('change', function() { consulta.consultarPunto(true); });
        this.noResultados();
    }
    // Guardar diferencia de tiempo entre el server y el cliente
    this.setTimeDiff = function(timeDiff)
    {
        this.timeDiff = timeDiff;
    }
    // Cambiar de grupo
    this.cambiarGrupo = function()
    {
        $('#puntos').html('');
        consulta.resetHorarios();
        var grupoId = $('#grupos').val() * 1;
        $.ajax({
            type       : "POST",
            url        : this.listarPuntosUrl,
            data       : {'id':grupoId},
            dataType   : 'json',
            beforeSend : function()
            {
                $('#puntos').html('<option value="0">Cargando...</option>');
            },
            success : function(data)
            {
                if (data['err'] == undefined)
                {
                    $('#puntos').html('<option value="0">Seleccionar punto</option>'+ data['html']);
                }
            }
        });
    }
    // Consultar punto
    this.consultarPunto = function(loading)
    {
        var puntoId = $('#puntos').val() * 1;
        if (puntoId != 0)
        {
            $.ajax({
                type       : "POST",
                url        : this.listarTiemposUrl,
                data       : {'id':puntoId},
                dataType   : 'json',
                beforeSend : function()
                {
                    if (loading != undefined)
                    {
                        consulta.resetHorarios();
                        $('#cargando').show();
                    }
                },
                success : function(data)
                {
                    if (loading != undefined)
                    {
                        $('#cargando').hide();
                    }
                    else
                    {
                        consulta.resetHorarios();
                    }
                    if (data['server_ts'] != undefined)
                    {
                        var serverTs = data['server_ts']*1;
                        var timeDiff = serverTs - Math.round(new Date().getTime()/1000.0);
                        consulta.setTimeDiff(timeDiff);
                    }
                    if (data[puntoId] != undefined)
                    {
                        consulta.actualizarInterval = setInterval(function(){ consulta.consultarPunto();}, 1000);
                        $('.new_horario').remove();
                        consulta.currentColor = 1;
                        for (i=0;i<data[puntoId].length;i++)
                        {
                            consulta.appendHorario(data[puntoId][i]);
                        }
                    }
                    else
                    {
                        consulta.noResultados();
                    }
                }
            });
        }
        else
        {
            this.currentPuntoId = false;
            if (this.actualizarInterval)
            {
                clearInterval(this.actualizarInterval);
            }
            this.actualizarInterval = null;
        }
    }
    // Reset horarios
    this.resetHorarios = function()
    {
        $('.new_horario').remove();
        clearInterval(consulta.actualizarInterval);
    }
    // Append horario
    this.appendHorario = function(data)
    {
        var clone = $('#foo_horario').clone(true);
        clone.addClass('new_horario');
        clone.removeAttr('id');
        if (this.currentColor == 10)
        {
            this.currentColor = 1;
        }
        clone.find('.horario_img').html('<img src="/images/monitoreo/vehiculo_color_'+(this.currentColor)+'.png" />');
        clone.find('.horario_hora').html(data.llegada);
        clone.find('.horario_tiempo').html(this.secondsToTime(data['tiempo']- Math.round(new Date().getTime()/1000.0) - this.timeDiff));
        clone.find('.horario_vehiculo').html(data['viaje']['vehiculos.nombre']);
        clone.find('.horario_patente').html(data['viaje']['vehiculos.patente']);
        clone.find('.horario_conductor').html(data['viaje']['conductores.nombre'] + ' '+ data['viaje']['conductores.apellido']);
        clone.show();
        $('#horario_table').append(clone);
        this.currentColor++;
    }
    this.noResultados = function()
    {
        consulta.resetHorarios();
        $('#horario_table').append('<tr class="new_horario"><td colspan="6">No hay informaci&oacute;n para mostrar</td></tr>');
    }
    // Time helpers
    this.secondsToTime = function(sec_num)
    {
        if (sec_num > 0)
        {
            var hours   = Math.floor(sec_num / 3600);
            var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
            var seconds = sec_num - (hours * 3600) - (minutes * 60);
            return (this.twoDigits(hours)+':'+this.twoDigits(minutes)+':'+this.twoDigits(seconds));
        }
        else
        {
            return 'Lleg&oacute;';
        }
    }
    this.twoDigits = function(value)
    {
        if(value < 10)
        {
            return '0' + value;
        }
        return value;
    }
};